# 1.可迭代对象
# 2.迭代器
# 【3.迭代器协议】
# 4.生成器

# 判断是迭代器
print('可迭代对象是有__iter__ 方法')
from collections.abc import Iterator
from collections.abc import Iterable
class A:
    pass

class B:
    def __iter__(self):
        self.n = 0
        print(f'可迭代对象{type(self)}这是迭代器的初始化')
        return self

class C:
    def __iter__(self):
        self.n = 0
        print(f'可迭代对象{type(self)}这是迭代器的初始化')
        return self
    def __next__(self):
        self.n += 1
        # 这里也能返回self.n
        return self

b1 = isinstance(A(), Iterable)
print(b1)

## 由于B有__iter__方法 所以他是可迭代对象
b2 = isinstance(B(), Iterable)
print(b2)



# 但是他不能变成迭代器对象,因为他还没有__next__方法【重要】
# 所以bi = iter(B()) 会报错【重要】



b3 = isinstance(C(), Iterable)
print(b3)
ci = iter(C())

next(ci)
print(ci)
print(ci.n)
next(ci)
print(ci)
print(ci.n)

print('__iter__与__next__就是迭代器协议')








